Fuzzy(Non repeatable) read
トランザクションの処理中に、他のトランザクションでcommitしたUPDATEが見えてしまう
Fuzzy readはNonrepeatable readともいうが、SELECTの再現性がないという意味だと思うkadoyau.icon
code:sql
BEGIN;
SELECT name FROM vtuber WHERE id = 1; -- 月ノ美兎
-- ここで別のトランザクションによってid=1のnameがUPDATEされてcommitされる
SELECT name FROM vtuber WHERE id = 1; -- 月野美兎
Dirty readと違って、commitされていないデータが見えることはない
これを防ぐには?
トランザクションが全て終了するまで上記別のトランザクションで変更された処理の変更前データを保持しておく実装がRDBMS側に必要
このような実装は各RDBMSに実装されていて、ユーザーとしてはREPEATABLE READ以上に設定すれば良い
同時実行編 第4回 3番目にゆるい分離レベル(リピータブルリード) | 日経クロステック(xTECH)
こんな時はどう動く?
SELECTの処理が猛烈に重くて途中でUPDATEされた場合
UPDATEされた結果が使われてしまうはず。試したことはない
失敗から学ぶRDBの正しい歩き方 14の図